#pragma once 
#include<string>
#include<sys/types.h>
#include<sys/socket.h>
#include<iostream>
//工具类
class Util
{
  public:
    //按行读取
    static int ReadLine(int sock,std::string &out)
    {
      //请求的发送换行符是统一的不会出现交叉
      char ch='t';
      while(ch!='\n')
      {
        ssize_t s=recv(sock,&ch,1,0);
        if(s>0)
        {
          if(ch=='\r')
            {
              recv(sock,&ch,1,MSG_PEEK);//读取的数据并不会拿出缓冲区
              if(ch=='\n')
              {
              //    \r\n或\n或\r->\n
              //窥探成功这个字符一定存在 判断后一个字符
                recv(sock,&ch,1,0);
              }
              else // \r
                ch='\n';
            }
        //普通字符和\n
        out.push_back(ch);
        }
        else if(s==0)
        {
          return 0;//对端关闭连接
        }
        else 
        {
          return -1;
        }
       }
      return out.size();
    }
    //截取字符串
    static bool CutString(const std::string & target,std::string &sub1_out,std::string &sub2_out,std::string sep=": ")
    {
      size_t pos =target.find(sep);
      if(pos!=std::string::npos)
        {
          sub1_out=target.substr(0,pos);
          sub2_out=target.substr(pos+sep.size());
          return true;
        }
      return false;
    }
};
